import Vue from 'vue'
import VueRouter from 'vue-router'

// 进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

import store from '@/store/index'

import util from '@/libs/util.js'
// 路由数据
import routes, {
    frameInRoutes
} from './routes'
// 路由数据
// import routes from './routes'
import * as userService from "@/api/upms/user";

// 由于懒加载页面太多的话会造成webpack热更新太慢，所以开发环境不使用懒加载，只有生产环境使用懒加载
const _import = require('@/libs/util.import.' + process.env.NODE_ENV)
let permissionMenuRes = []
let permissionMenu = []
let permissionHeaderMenu = []
let permissionRouter = []
//权限信息
let permission = {}
Vue.use(VueRouter)

// 导出路由 在 main.js 里使用
const router = new VueRouter({
    mode: 'hash',
    routes,
    isFetchPermissionInfo: false
})

let fetchPermissionInfo = async () => {
    //处理动态菜单
    // const formatRoutes = function (routes) {
    //     routes.forEach(route => {
    //         // console.log(route)
    //         let menu = {}
    //         let url = route.path
    //         menu.meta = {
    //             title: route.title,
    //             code: route.code,
    //             cache: true,
    //         }
    //         if (!/^http[s]?:\/\/.*/.test(url) && url != null && typeof url != 'undefined') {
    //             menu.name = route.path.replace(/\//g, '-')
    //             menu.icon = route.icon
    //             menu.path = route.path.replace(/\//g, '-')
    //             menu.component = null

    //             // if (route.type == '0') {
    //             //     const headerMenu = {}
    //             //     headerMenu.name = route.code
    //             //     headerMenu.icon = route.icon
    //             //     headerMenu.path = route.code
    //             //     headerMenu.title = route.title
    //             //     headerMenu.meta = {
    //             //         title: route.title,
    //             //         module: route.code
    //             //     }
    //             //     // console.log('headerMenu', headerMenu)
    //             //     permissionHeaderMenu.push(headerMenu)
    //             // }
    //             if (route.type == '2') {
    //                 try {
    //                     menu.component = _import(`${url}`) || null
    //                 } catch (e) {}
    //                 permissionRouter.push(menu)
    //             }
    //             if (route.children) {
    //                 formatRoutes(route.children)
    //             }
    //         }

    //     })
    // }

    // 动态处理路由
    const formatMenus = function (menus) {
        menus.forEach(menu => {
            // console.log('menu', menu)

            let url = menu.path
            menu.meta = {
                title: menu.title,
                code: menu.code,
                cache: true
            }
            if (!/^http[s]?:\/\/.*/.test(url)) {
                menu.name = menu.path.replace(/\//g, '-')
                menu.icon = menu.icon
                menu.path = menu.path.replace(/\//g, '-')

                if (menu.type == '2') {
                    try {
                        menu.component = _import(`${url}`) || null
                    } catch (e) {}
                    permissionRouter.push(menu)
                }
                if (menu.type == '1'){
                    try {
                        menu.name = menu.code || null
                        menu.path = menu.code || null
                    } catch (e) {}
                }

                if (menu.children) {
                    formatMenus(menu.children)
                }
            }else{
                menu.component = null
            }

        })
    }


    // 请求当前用户的权限信息
    try {
        let userPermissionInfo = await userService.getUserPermissionInfo()
        permissionMenuRes = userPermissionInfo.menus
        permissionMenu = permissionMenuRes
        permission.permissions = userPermissionInfo.permissions || []
        permission.isAdmin = userPermissionInfo.isAdmin == 1

        // 存储权限信息
        sessionStorage.setItem("permissions", JSON.stringify(permission.permissions))

        // 设置权限信息
        // store.commit('d2admin/permission/set', permission)
    } catch (ex) {
        console.log(ex)
    }

    // 构建菜单
    // formatRoutes(permissionMenuRes)
    // 构建路由
    formatMenus(permissionMenu)
console.log(permissionMenu)
    //动态添加路由
    permissionRouter.forEach(route => {
        frameInRoutes[0].children.push(route)
    })
    router.addRoutes(frameInRoutes)

    let allMenuAside = [...permissionMenu]
    let allMenuHeader = [...permissionMenu]
    let allMenu = [...permissionMenu, ...frameInRoutes]

    // console.log('allMenuHeader', allMenuHeader)
    // console.log('allMenuAside', allMenuAside)
    // 设置顶栏菜单
    store.commit('d2admin/menu/headerSet', allMenuHeader)
    // 设置侧边栏菜单
    store.commit('d2admin/menu/fullAsideSet', allMenuAside)
    // 初始化菜单搜索功能
    store.commit('d2admin/search/init', allMenuAside)
    // 处理路由 得到每一级的路由设置
    store.commit('d2admin/page/init', allMenu)
    // 加载上次退出时的多页列表
    store.dispatch('d2admin/page/openedLoad')
    await Promise.resolve()
}

//免校验token白名单
let whiteList = ['/login']
/**
 * 路由拦截
 * 权限验证
 */
router.beforeEach(async (to, from, next) => {
    // 确认已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201
    await store.dispatch('d2admin/page/isLoaded')
    // 确认已经加载组件尺寸设置 https://github.com/d2-projects/d2-admin/issues/198
    await store.dispatch('d2admin/size/isLoaded')
    // 进度条
    NProgress.start()
    // 关闭搜索面板
    store.commit('d2admin/search/set', false)
    // 验证当前路由所有的匹配中是否需要有登录验证的
    if (whiteList.indexOf(to.path) === -1) {
        // 这里暂时将cookie里是否存有token作为验证是否登录的条件
        // 请根据自身业务需要修改
        const token = util.cookies.get('token')

        if (token && token !== 'undefined') {
            //拉取权限信息
            if (router.options.isFetchPermissionInfo == false) {
                await fetchPermissionInfo();
                router.options.isFetchPermissionInfo = true;
                // next(to.name, true) 禁止启用防止跳转找不到参数
                next(to.fullPath, true)
            } else {
                next()
            }
        } else {
            // 没有登录的时候跳转到登录界面
            util.cookies.set('redirect', to.fullPath)
            // 携带上登陆成功之后需要跳转的页面完整路径
            next({
                name: 'login',
                query: {
                    redirect: to.fullPath
                }
            })
            // https://github.com/d2-projects/d2-admin/issues/138
            NProgress.done()
        }
    } else {
        // 不需要身份校验 直接通过
        next()
    }
})

router.afterEach(to => {
    // console.log('to.fullPath', to.fullPath)
    // 进度条
    NProgress.done()
    // 多页控制 打开新的页面
    store.dispatch('d2admin/page/open', to)
    // 更改标题
    util.title(to.meta.title)
})

export default router